package com.study.designmodes.service.executor;

/**
 * 抽象执行者
 * 模板方法模式
 *
 * @author yangyb
 * @date 2023/02/01
 */
public abstract class AbstractExecutor<T> {

    /**
     * 执行业务逻辑
     */
    public void doExecute(T t) {
        try {
            this.init(t);
            this.process(t);
        } finally {
            this.finish();
        }
    }

    /**
     * 处理过程
     *
     * @param t 处理参数
     */
    protected abstract void process(T t);

    /**
     * 初始化
     *
     * @param t 处理参数
     */
    protected abstract void init(T t);

    /**
     * 结束
     */
    protected abstract void finish();
}
